package corejava;
/**
 * 运行结果：
load outer class...
==========分割线==========
load static inner class...
static inner method...

    调用构造方法时，外部类Outer被加载，但这时其静态内部类StaticInner却未被加载。直到调用该内部类的静态方法（在分割线以下），StaticInner才被加载。可以做类似的实验验证非静态内部类的情况。
    结论：加载一个类时，其内部类不会同时被加载。一个类被加载，当且仅当其某个静态成员（静态域、构造器、静态方法等）被调用时发生。 
 *
 */
public class Outer {
    static {
        System.out.println("load outer class...");
    }
    
    //静态内部类
    static class StaticInner {
        static {
            System.out.println("load static inner class...");
        }
        
        static void staticInnerMethod() {
            System.out.println("static inner method...");
        }
    }
        
    public static void main(String[] args) {
        Outer outer = new Outer();      //此刻其内部类是否也会被加载？
         System.out.println("===========分割线===========");
        Outer.StaticInner.staticInnerMethod();      //调用内部类的静态方法
    }
}
